 |
Technote 1124
New Sound Input Driver Features
ñ⁄éü
ïœçXÇÃîwåi
ïœçXì_
ïœçXì_Ç÷ÇÃÉXÉ}Å[ÉgÇ»ëŒèàï˚ñ@
ÉTÉìÉvÉãÉRÅ[Éh
ǪÇÃëºÇÃíçà”ÇΔÉRÉÅÉìÉg
óvñÒ
|
DZÇà TECHNOTE Ç≈ÇÕÅAMac OS 8.1 ÇΔÇΔLJDžì±ì¸Ç≥ÇÍÇΩÅAêVǵǢ
PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃäOïîÇÃêVã@î\ÇΔïœçXì_Çê‡ñæÇµÇ‹Ç∑ÅBDZÇÃÉhÉLÉÖÉÅÉìÉgÇÕÅAéÂÇ…ÉTÉEÉìÉhì¸óÕÅAèÍçáÇ…ÇÊǡǃÇÕÉTÉEÉìÉhèoóÕ
(çƒê∂) ÇçsǧÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉfÉxÉçÉbÉpÇëŒè€ÇΔǵǃǢNjÇ∑ÅBÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇçÏê¨ÇµÇƒÇ¢ÇÈÉfÉxÉçÉbÉpLJÅADZÇÃ
TECHNOTE Ç…àÍí ÇËñ⁄Çí ǵǃÅADZǧǵÇΩïœçXì_Çé©ï™ÇÃÉhÉâÉCÉoÇ…îΩâfÇ≥ÇπÇÈÇ◊Ç´Ç©åüì¢ÇµÇƒÇ≠ÇæÇ≥Ç¢ÅB |
ïœçXÇÃîwåi
ÉfÉxÉçÉbÉpÇ™ç°Ç‹Ç≈ãÅÇflǃǴÇΩÇÃÇÕÅAÇÊÇËë¨Ç≠ÅAÇÊÇËè_ìÓÇ≈ÇÊÇËóLâvÇ»ã@î\ÇéùǬÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ≈Ç∑ÅBêVǵǢ
PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÕÅADZÇÃóvãÅÇ…âûǶÇÈÇΩÇflÇÃç≈èâÇÃÉXÉeÉbÉvÇ≈Ç∑ÅB
óvãÅÇà 1 ǬÇÕÅAò^âπÇÇÕÇ∂ÇflǃǩÇÁÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ò^âπÉfÅ[É^ÇÃç≈èâÇÃÉrÉbÉgÇéÊìæÇ∑ÇÈÇ‹Ç≈ÇÃë“Çøéûä‘ÇíZÇ≠Ç∑ÇÈDZÇΔÇ≈ǵÇΩÅB
Ç‹ÇΩÅAäÑÇËçûÇ›ÉoÉbÉtÉ@Ç 2 ÇÃêÆêîèÊDžǵǃÅAçÇë¨ÉtÅ[ÉäÉGïœä∑ǻǫÇÃÉAÉãÉSÉäÉYÉÄÇLJǡÇΔå¯ó¶ÇÊÇ≠çsÇ¢ÇΩÇ¢ÇΔǢǧóvãÅLJdžÇËNjǵÇΩÅB
ÉÜÅ[ÉUÇÃë§ÇÕÉVÉìÉvÉãÇ»ÉTÉEÉìÉhì¸óÕÇóvãÅǵǃǢNjǵÇΩÅBä˘ë∂ÉhÉâÉCÉoÇ≈ÇÕÅACD Çï∑Ç¢ÇΩÇËÅAÉRÉìÉsÉÖÅ[É^ÇÃÉ{ÉäÉÖÅ[ÉÄÇí≤êÆÇ∑ÇÈǻǫÇÃä»íPÇ»ÉIÅ[ÉfÉBÉIä÷òAÇÃçÏãΔÇ≈Ç≥ǶÅAMacintosh
Çê›íËÇ∑ÇÈÇÃÇ™ìÔǵÇ∑ǨNjǵÇΩÅBÉAÉbÉvÉãÇÃÉTÉ|Å[ÉgïîàıÇÕÅAÉIÅ[ÉfÉBÉI CD Çï∑Ç≠DZÇΔÇ™Ç≈ǴǻǢÇΔǢǧÉÜÅ[ÉUÇÃìdòbÇéÛÇØÇÈDZÇΔÇ™ÇÊÇ≠džÇËNjǵÇΩÅBDZÇÃñ‚ëËLJÅAêVǵǢÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ…ÇÊǡǃëŒâûǵNjǵÇΩÅB
ç≈å„ÇÃïœçXì_ÇÕÅAÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃÉCÉìÉ^ÉtÉFÅ[ÉX (siOptionsDialog )
ÇÃçÌèúÇ≈ÅADZÇÍÇÕãZèpìIÇ»ñ Ç©ÇÁÇÃóvêøÇ≈Ç∑ÅBDZÇÍÇÕÅAÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇïWèÄÉhÉâÉCÉoÇÃêßå¿
(ModalDialog ÇåƒÇŒÇ»Ç¢Ç»Ç«) Ç…ÇÊÇËåµñßDžǵÇΩÇ™ÇÌÇπÇÈÇΩÇflÇ≈Ç∑ÅB
íçà”ÅF
Sound Manager ÇÃÇ«ÇÃã@î\Ç™égópâ¬î\Ç©Çí≤Ç◊ÇÈÇΩÇflÇ…ÅAMac OS ÇÃÉoÅ[ÉWÉáÉìÇÃÉ`ÉFÉbÉNÇ…óäǡǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅBDZÇÍÇÁÇÃïœçXÇïÅï’ìIǻLJÇÃÇΔǵǃÉ\Å[ÉXÉRÅ[ÉhÇÉAÉbÉvÉfÅ[ÉgǵǃÇ≠ÇæÇ≥Ç¢ÅBÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃïœçXÇÕ
Mac OS 8.1 ÇëŒè€Ç…çsÇÌÇÍNjǵÇΩÇ™ÅADZǧǵÇΩïœçXÇÕ Sound Manager ÉVÉXÉeÉÄã@î\ägí£ÇÃÉAÉbÉvÉfÅ[ÉgÇí Ç∂ǃÅAMac
OS ÇÃà»ëOÇÃÉoÅ[ÉWÉáÉìDžLJìKópÇ≥ÇÍÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅB |
ïœçXì_
ë“Çøéûä‘ÇÃíZèk
LJǡÇΔLJëΩÇ¢óvãÅÇà 1 ǬÇÕÅAÉTÉEÉìÉhì¸óÕÇΔèoóÕ (çƒê∂) ÇÃäÑÇËçûÇ›ë“Çøéûä‘ÇÃíZèkÇ≈ǵÇΩÅBDZÇÃñ‚ëËÇÕÅAÉnÅ[ÉhÉEÉFÉAäÑÇËçûÇ›ÉoÉbÉtÉ@ÇÃÉTÉCÉYÇè¨Ç≥Ç≠Ç∑ÇÈDZÇΔÇ≈ëŒâûǵNjǵÇΩÅBâºëzÉÅÉÇÉä
(VM) Ç™ÉIÉtÇÃèÍçáÇÕÅAà»ëOÇÕ 1056 ÉTÉìÉvÉãÇ≈ǵÇΩÇ™ÅAç°ÇÕ 512 ÉTÉìÉvÉãÇ…å∏ÇÁǵNjǵÇΩÅBVM
Ç™ÉIÉìÇÃèÍçáÇÕ 4224 ÉTÉìÉvÉãÇ©ÇÁ 4096 ÉTÉìÉvÉãDžǵNjǵÇΩÅB
512 ÇΔǢǧêîílÇ™ëIÇŒÇÍÇΩóùóRÇÕ 2 ǬdžÇËÇ‹Ç∑ÅBÉoÉbÉtÉ@ÇÃÉTÉCÉYÇñÒ 50% è¨Ç≥Ç≠Ç∑ÇÈDZÇΔÇ≈ÅAäÑÇËçûÇ›ë“Çøéûä‘LJ
50% íZÇ≠Ç»ÇËNjǵÇΩÅBDZÇÍÇ≈ÉTÉEÉìÉhäÑÇËçûÇ›ÇÕǮǮÇÊǪ 22 É~ÉäïbÇ≤ÇΔÇ≈ÇÕÇ»Ç≠ÅA11 É~ÉäïbÇ≤ÇΔÇ…ãNDZÇÈÇÊǧDžǻÇËNjǵÇΩ
(44.1KHz ÉTÉEÉìÉhÇÃèÍçá)ÅBDZÇÍÇ≈ÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÇÊÇËè≠ǻǢë“Çøéûä‘Ç≈ò^âπÉfÅ[É^ÇéÛÇØéÊÇÍÇÈÇÊǧDžǻÇËÅAâπê∫ÇÃçƒê∂LJëÅÇ≠énÇflÇÈDZÇΔÇ™Ç≈Ç´ÇÈÇÊǧDžǻÇËNjǵÇΩÅB
ÉoÉbÉtÉ@ÉTÉCÉYÇ 512 ÉTÉìÉvÉãÇ…çÌå∏ǵÇΩ 2 ǬÇflÇÃóùóRÇÕÅA512 Ç™ 2 ÇÃêÆêîèÊÇ≈džÇÈDZÇΔÇ≈ÅAò^âπǵÇΩâπê∫ÇÉäÉAÉãÉ^ÉCÉÄÇ≈ï™êÕǵÇÊǧÇΔǵǃǢÇÈÉfÉxÉçÉbÉpÇ…ÇΔǡǃÅADZÇÍÇÕèdóvǻDZÇΔÇ≈Ç∑ÅBDZÇÃéÌÇÃï™êÕ
(ǬNjÇËÅAçÇë¨ÉtÅ[ÉäÉGïœä∑) Ç…égópÇ∑ÇÈÉAÉãÉSÉäÉYÉÄÇ≈ÇÕÅAǵnjǵnj 2 ÇÃêÆêîèÊÇÃÉoÉbÉtÉ@Ç™ãÅÇflÇÁÇÍÇ‹Ç∑ÅBÉTÉEÉìÉhÉhÉâÉCÉoÇÃÉoÉbÉtÉ@ÉTÉCÉYÇDZÇÃÇÊǧDží≤êÆÇ∑ÇÈDZÇΔÇ≈ÅAÉfÉxÉçÉbÉpÇÕäÑÇËçûÇ›ÉRÅ[ÉãÉoÉbÉNì‡Ç≈ï°éGÇ»ÉfÅ[É^ÇÃÉoÉbÉtÉ@ÉäÉìÉOÇçsǧïKóvǙǻÇ≠Ç»ÇËÇ‹Ç∑ÅBsiHardwareFormat
ÉZÉåÉNÉ^ÇégǡǃÅAçƒê∂ópÉnÅ[ÉhÉEÉFÉAÇÃÉoÉbÉtÉ@ÉTÉCÉYÇí≤Ç◊ÅAsiDeviceBufferInfo
Ç≈ì¸óÕópÉnÅ[ÉhÉEÉFÉAÇÃÉoÉbÉtÉ@ÉTÉCÉYÇí≤Ç◊ǃÇ≠ÇæÇ≥Ç¢ÅB
ÉIÉvÉVÉáÉìÉ_ÉCÉAÉçÉOÇÃçÌèú
siOptionsDialog ÉZÉåÉNÉ^Ç™ PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ©ÇÁçÌèúÇ≥ÇÍNjǵÇΩÅBçÌèúÇ≥ÇÍÇΩÇÃÇÕÅAéüÇÃ
2 ǬÇÃóùóRÇ©ÇÁÇ≈Ç∑ÅB
- ÉhÉâÉCÉoÇÕÉÜÅ[ÉUÉCÉìÉ^ÉtÉFÅ[ÉXÇéùǬÇ◊Ç´Ç≈ÇÕdžÇËÇ‹ÇπÇÒ (é¿ç€ÅAÉlÉCÉeÉBÉuÉfÉoÉCÉXÉhÉâÉCÉo
(
'ndrv' ) ÇÕ ModalDialog ÇÃåƒÇ—èoǵǙÇ≈Ç´Ç‹ÇπÇÒ)ÅB
- É_ÉCÉAÉçÉOÇÕ Macintosh ÇÃÉÇÉfÉãÇ…ÇÊǡǃàÍä—ǵǃǢNjÇπÇÒÅB
ÉfÉxÉçÉbÉpÇÃǟǧǙ siOptionsDialog ÇÊÇËLJÇ∑ÇÆÇÍÇΩÉCÉìÉ^ÉtÉFÅ[ÉXÇíÒãüÇ≈Ç´ÇÈÇÕÇ∏ÇæÇΔä¥Ç∂ÇΩÇ©ÇÁÇ≈Ç∑ÅBÉfÉxÉçÉbÉpÇÕÅAé©ï™é©êgÇ≈çÏê¨Ç∑ÇÈDZÇΔLJÅAQuickTime
Çà SequenceGrabber É_ÉCÉAÉçÉOÇégǧDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB
ì¸óÕÉ\Å[ÉXëIëÇÃêVǵǢï˚ñ@
ÉfÉxÉçÉbÉpÇÕÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇëIëÇ∑ÇÈìùàÍìIÇ»ï˚ñ@ÇãÅÇflǃǢNjǵÇΩÅBDZÇÍÇÕÅAsiOSTypeInputSource
Ç®ÇÊÇ— siOSTypeInputAvailable ÉZÉåÉNÉ^Ç…ÇÊǡǃíBê¨Ç≥ÇÍNjǵÇΩÅBÉfÉxÉçÉbÉpÇÕÅAì¸óÕÉ\Å[ÉXÇDZÇÍÇ‹Ç≈ÇÃÇÊǧDžñºëO
(ÉVÉXÉeÉÄÇ…ÇÊǡǃà·Ç¡ÇΩÇËÅAÉçÅ[ÉJÉâÉCÉYÇ≥ÇÍǃǵNjǧDZÇΔǙdžÇËÇ‹Ç∑) Ç≈ÇÕÇ»Ç≠ÅAïWèÄÇÃ
OSType Ç…ÇÊǡǃëIëÇ≈Ç´ÇÈÇÊǧDžǻÇËNjǵÇΩÅB
ÇÊÇËÉVÉìÉvÉãÇ»ÉTÉEÉìÉhÉÇÉfÉã
Macintosh ÇÃÉTÉEÉìÉhÉÇÉfÉãÇÉVÉìÉvÉãÇ…Ç∑ÇÈDZÇΔÇ…çvå£ÇµÇΩLJǧǖÇΔǬÇÃïœçXì_ÇÕÅADZÇÍÇ‹Ç≈ï ÅXÇæÇ¡ÇΩÉwÉbÉhÉtÉHÉìÇΔì‡ïîÉXÉsÅ[ÉJÇÃâπó í≤êflÇ
1 ǬÇÃÉRÉìÉgÉçÅ[ÉãÇ…ìùçáǵÇΩDZÇΔÇ≈Ç∑ÅBÉwÉbÉhÉtÉHÉìÇÃâπó ÇÕì‡ïîÉXÉsÅ[ÉJÇÃâπó ÇΔÇÕï Ç…ê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç»Ç≠Ç»ÇËNjǵÇΩ
(ÉÜÅ[ÉUÇÕÅAÇ«ÇÃÉ{ÉäÉÖÅ[ÉÄÉXÉâÉCÉ_ÇégǡǃìKêÿÇ»âπó ÉåÉxÉãÇ…í≤êflÇ∑ÇÈÇÃÇ©ÅAç¨óêÇ∑ÇÈDZÇΔÇ™ëΩǩǡÇΩÇ©ÇÁÇ≈Ç∑)ÅBÇ‹ÇΩÅAÉwÉbÉhÉtÉHÉìëïíÖéûÇ…ì‡ïîÉXÉsÅ[ÉJÇÃñ≥âπèÛë‘Çí≤êflÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç»Ç≠Ç»ÇËNjǵÇΩÅB
ïœçXì_Ç÷ÇÃÉXÉ}Å[ÉgÇ»ëŒèàï˚ñ@
ë“Çøéûä‘ÇÃíZèk
ÉhÉâÉCÉoÇÃì¸óÕÉoÉbÉtÉ@ÇÃïœçXÇÕâΩLJñ‚ëËÇãNDZÇ≥ǻǢÇÕÇ∏Ç≈Ç∑ÅBëÂëΩêîÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕïœçXǙdžǡÇΩDZÇΔÇ…ãCÇ√ǩǻǢÇ≈ǵÇÂǧÅBè≠êîÇÃÅAäÑÇËçûÇ›ÉoÉbÉtÉ@ÉTÉCÉYÇ…àÀë∂Ç∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAsiDeviceBufferInfo
ÉZÉåÉNÉ^Ç≈ SPBGetDeviceInfo ÇåƒÇ—èoǵǃÅAäÑÇËçûÇ›ÉoÉbÉtÉ@ÇÃÉTÉCÉYÇéÊìæÇµÇƒÇ¢ÇÈÇÕÇ∏Ç≈Ç∑ÅBDZÇÍÇê≥ǵÇ≠çsǡǃǢÇÍÇŒÅAâΩLJïœçXÇπÇ∏Ç…êVǵǢÉoÉbÉtÉ@ÉTÉCÉYÇ≈ìÆçÏÇ∑ÇÈÇÕÇ∏Ç≈Ç∑ÅB
ÉIÉvÉVÉáÉìÉ_ÉCÉAÉçÉOÇÃçÌèú
siOptionsDialog ÉZÉåÉNÉ^Ç™çÌèúÇ≥ÇÍÇΩÇΩÇflÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇÕÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃò^âπèÛë‘ÇìKêÿÇ…ê›íËÇ∑ÇÈÇΩÇflÇÃÉCÉìÉ^ÉtÉFÅ[ÉXÇçÏê¨ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÉfÉxÉçÉbÉpÇÕLJÇÕÇ‚
siOptionsDialog ÇåƒÇ—èoǵÇΩÇËÅAëºÇÃÉ\ÉtÉgÉEÉFÉAÇ™ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇê›íËǵǃÇ≠ÇÍÇÈDZÇΔÇ…àÀë∂Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç»Ç≠Ç»ÇËNjǵÇΩÅB
ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃìKêÿÇ»ê›íËï˚ñ@DžǬǢǃÇÕÅAÇ≥NjǥNjǻç¨óêǙdžǡÇΩÇÊǧÇ≈Ç∑ÅBéüÇÃä»íPÇ»ãKë•ÇêSÇ…óØÇflǃÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇê›åvǵǃÇ≠ÇæÇ≥Ç¢ÅB
- ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇï¬Ç∂ÇΩå„LJê›íËÇ™écÇÈÇΔçlǶǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB
- ëºÇÃÉvÉçÉOÉâÉÄÇ™ÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇë„ÇÌÇËÇ…ê›íËǵǃÇ≠ÇÍÇÈÇΔçlǶǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB
- ëºÇÃÉvÉçÉOÉâÉÄÇ™çƒê∂ÉpÉâÉÅÅ[É^ (
playthrough state ) Çê›íËǵǃÇ≠ÇÍÇÈÇΔçlǶǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB
- ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃèÛë‘ÇâºíËǵǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB
DZÇÃä»íPÇ»ãKë•Ç©ÇÁÅAÉÜÅ[ÉUÇ™ÉÇÉjÉ^ÅïÉTÉEÉìÉhÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÇ‹ÇΩÇÕÉTÉEÉìÉhÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÇ≈Ç∑Ç≈Ç…ÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇê›íËǵǃǢÇÈÇΔçlǶǃÇÕÇ¢ÇØÇ»Ç¢Ç±ÇΔÇÕñæîíÇ≈Ç∑ÅBç≈èâÇÃ
3 ǬÇÃÉãÅ[ÉãÇîjǡǃǵNjǧDZÇΔÇ…Ç»ÇÈÇ©ÇÁÇ≈Ç∑ÅB
ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇê›íËÇ∑ÇÈê≥ǵǢï˚ñ@ÇÕÅAé©ï™Ç≈çÏê¨ÇµÇΩÉCÉìÉ^ÉtÉFÅ[ÉXÇ©ÅAQuickTime
Çà SequenceGrabber ÉCÉìÉ^ÉtÉFÅ[ÉXÇÉÜÅ[ÉUÇ…íÒé¶Ç∑ÇÈDZÇΔÇ≈Ç∑ÅBÉCÉìÉ^ÉtÉFÅ[ÉXÇ≈ç≈í·å¿ïKóvÇ»ÇÃÇÕÅAÉÜÅ[ÉUÇ™äÛñ]ÇÃÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇΔçƒê∂ÉpÉâÉÅÅ[É^ÇëIëÇ≈Ç´ÇÈDZÇΔÇ≈Ç∑ÅBì¸óÕÉ\Å[ÉXÇΔçƒê∂ÉpÉâÉÅÅ[É^
(ÉTÉìÉvÉãÉåÅ[ÉgÅAÉTÉìÉvÉãÉTÉCÉYÅAÉ`ÉÉÉlÉãêîǻǫ) Ç™ê›íËÇ≥ÇÍÇΩÇÁÅAì¸óÕÉhÉâÉCÉoÇï¬Ç∂ǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅBÉhÉâÉCÉoÇäJÇ´íºÇµÇΩÇΔÇ´Ç…ÅAÉÜÅ[ÉUǙdžǻÇΩÇÃÉvÉçÉOÉâÉÄÇégǡǃê›íËǵÇΩNjNjDžǻǡǃǢÇÈÇΔǢǧï€èÿǙǻǢǩÇÁÇ≈Ç∑ÅBì¸óÕÉhÉâÉCÉoÇï¬Ç∂ÇÈïKóvǙdžÇÈèÍçáÇÕÅAäJÇ´íºÇµÇΩÇΔÇ´Ç…å≥ÇÃéwíËí ÇËÇ…ê›íËǵíºÇµÇƒÇ≠ÇæÇ≥Ç¢ÅB
ì¸óÕÉ\Å[ÉXëIëÇÃêVǵǢï˚ñ@
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃçÏê¨é“Ç™ä»íPÇ…ê≥ǵǢì¸óÕÉ\Å[ÉXÇëIëÇ≈Ç´ÇÈÇÊǧDžÅAêVǵǢ PCI
ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ…ÇÕ 2 ǬÇÃêVǵǢÉZÉåÉNÉ^Ç™í«â¡Ç≥ÇÍÅAOSType Ç≈ì¸óÕÉ\Å[ÉXÇ™ëIëÇ≈Ç´ÇÈÇÊǧDžǻÇËNjǵÇΩÅB
* siOSTypeInputSource = FOUR_CHAR_CODE('inpt')
* siOSTypeInputAvailable = FOUR_CHAR_CODE('inav')
|
siOSTypeInputSource ÉZÉåÉNÉ^ÇégǧÇΔÅAì¸óÕÉ\Å[ÉXî‘çÜÇ≈Ç»Ç≠ OSType
ÇìnÇ∑DZÇΔÇ≈ÅAì¸óÕÉ\Å[ÉXÇê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÍÇÕÅAäOïîÉ}ÉCÉNǻǫÅAìØÇ∂ì¸óÕÉ\Å[ÉXÇ≈LJã@éÌÇ…ÇÊǡǃëSÇ≠à·Ç§É\Å[ÉXî‘çÜDžǻǡǃǢÇÈÇΔǢǧåªé¿ÇçlǶÇÈÇΔÅAîÒèÌÇ…ï÷óòÇ≈Ç∑ÅBsiOSTypeInputSource
ÉZÉåÉNÉ^Ç…éwíËÇ≈Ç´ÇÈì¸óÕÉ\Å[ÉXÇÃíËêîÇÕéüÇÃÇΔÇ®ÇËÇ≈Ç∑ (Universal Headers 3.1 Ç©ÇÁ)ÅB
enum {
kNoSource = FOUR_CHAR_CODE('none'),
kCDSource = FOUR_CHAR_CODE('cd '),
kExtMicSource = FOUR_CHAR_CODE('emic'),
kRCAInSource = FOUR_CHAR_CODE('irca'),
kTVFMTunerSource = FOUR_CHAR_CODE('tvfm'),
kDAVInSource = FOUR_CHAR_CODE('idav'),
kIntMicSource = FOUR_CHAR_CODE('imic'),
kMediaBaySource = FOUR_CHAR_CODE('mbay'),
kModemSource = FOUR_CHAR_CODE('modm'),
kZoomVideoSource = FOUR_CHAR_CODE('zvpc')
};
|
siOSTypeInputSource ÉZÉåÉNÉ^ÇÕ SPBSetDeviceInfo ÇΔ SPBGetDeviceInfo
ÇÃóºï˚Ç≈égópÇ≈Ç´Ç‹Ç∑Ç™ÅAsiOSTypeInputAvailable ÇÕÅASPBGetDeviceInfo
Ç≈ǵǩégǶNjÇπÇÒÅBå„é“ÇÕåªç›Çà Macintosh Ç≈égópÇ≈Ç´ÇÈ OSType
ÉZÉåÉNÉ^ÇÉäÉXÉgÇ≈ï‘Ç∑Ç©ÇÁÇ≈Ç∑ÅB
siOSTypeInputSource Ç®ÇÊÇ— siOSTypeInputAvailable ÉZÉåÉNÉ^ÇÃégópñ@ÇÃè⁄ç◊DžǬǢǃÇÕÅAâ∫ãLÇÃÉTÉìÉvÉãÉRÅ[ÉhÇΔÅuQ&A SND12ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
DZÇÍÇÁÇÃÉZÉåÉNÉ^ÇÕÅAdžÇÁÇ©Ç∂Çfl Sound Manager Ç‚ Sound Input Manager ÇÃÉoÅ[ÉWÉáÉìÉ`ÉFÉbÉNÇçsÇÌÇ∏Ç…égǶNjÇ∑ÅBÉZÉåÉNÉ^ÇégǮǧÇΔǵǃÉGÉâÅ[Ç™ï‘ǡǃǴÇΩèÍçáÇÕÅAǪÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÕêVǵǢÉZÉåÉNÉ^ÇÉTÉ|Å[ÉgǵǃǢǻǢDZÇΔÇ™ÇÌÇ©ÇÈÇÃÇ≈ÅAǪÇÃèÍçáÇÕè]óàÇÃï˚ñ@Ç≈ÉTÉEÉìÉhì¸óÕÉ\Å[ÉXÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑
(É_ÉCÉAÉçÉOÇï\é¶ÇµÇƒÉÜÅ[ÉUÇ…ì¸óÕÉ\Å[ÉXÇëIëǵǃLJÇÁǧǻǫ)ÅB
ÇÊÇËÉVÉìÉvÉãÇ»ÉTÉEÉìÉhÉÇÉfÉã
ÉwÉbÉhÉtÉHÉìÇΔì‡ïîÉXÉsÅ[ÉJÇÃå¬ï ÇÃâπó í≤êflÇÇ≈Ç´Ç»Ç≠ǵÇΩÇÃÇÕÅAâΔíÎópÉXÉeÉåÉIǻǫÇÃëºÇÃÉIÅ[ÉfÉBÉIÉnÅ[ÉhÉEÉFÉAÇ…ãflÇ¢ÉCÉìÉ^ÉtÉFÅ[ÉXÇÉÜÅ[ÉUÇ…íÒãüÇ∑ÇÈÇΩÇflÇ≈Ç∑ÅBDZÇÃÉIÅ[ÉfÉBÉIÉÇÉfÉãÇ≈ÇÕÅAÉwÉbÉhÉtÉHÉìÇÇ¬Ç»ÇÆÇΔÅAÉÅÉCÉìÉÜÉjÉbÉgÇÃÉXÉsÅ[ÉJÇÕÉIÉtÇ…Ç»ÇËÅAâπó í≤êflǬNjǛÇÇ‹ÇÌÇ∑ÇΔç°ìxÇÕÉwÉbÉhÉtÉHÉìÇÃâπó Ç™ïœâªÇµÇ‹Ç∑ÅBDZÇÍÇÕÅAÉèÉìÉ{É^ÉìÉ}ÉEÉXÇÃÇÊǧDžÉVÉìÉvÉãÇ»äTîOÇ≈Ç∑ÅBâπó í≤êflǬNjǛǙ
1 Ç¬ÇµÇ©Ç»ÇØÇÍÇŒÅAÇ«ÇÍÇégǧÇÃÇ©ñ¿Ç§Ç±ÇΔÇÕdžÇËÇ‹ÇπÇÒÅBì‡ïîÉXÉsÅ[ÉJÇÃâπó Ç…çÏópÇ∑ÇÈ
API åƒÇ—èoǵÇÕèÌÇ…ÉwÉbÉhÉtÉHÉìÇÃâπó ÇLJê›íËǵÅAǪÇÃîΩëŒÇ‡ìØÇ∂Ç≈Ç∑ÅBâπó Çï ÅXÇ…í≤êÆÇ∑ÇÈï˚ñ@ÇÕdžÇËÇ‹ÇπÇÒÅBǪÇÃã@î\ÇÕçÌèúÇ≥ÇÍNjǵÇΩÅB
DZÇÃÉTÉEÉìÉhÉÇÉfÉãÇÕÅAÉwÉbÉhÉtÉHÉìÇΔì‡ïîÉXÉsÅ[ÉJÇìØéûDžǵǩâπó í≤êflÇ≈ǴǻǢ Macintosh
Ç‚ÅAÉwÉbÉhÉtÉHÉìÇ™ê⁄ë±Ç≥ÇÍÇÈÇΔì‡ïîÉXÉsÅ[ÉJÇÃê⁄ë±Ç™êÿÇÍÇÈ Macintosh DžLJäYìñǵNjÇ∑ÅB
ÉTÉìÉvÉãÉRÅ[Éh
éüÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÕÅAsiOSTypeInputAvailable Ç©ÇÁï‘Ç≥ÇÍÇΩ OSType
îzóÒÇ÷ÇÃÉAÉNÉZÉXï˚ñ@Çé¶Ç∑LJÇÃÇ≈Ç∑ÅB
OSErr GetSoundInputSourceNames (long siRefNum, Handle *sourceNames) {
OSErr err;
long offset;
short numNames;
int i;
char sourceName[255];
// siInputSourceNames ÇÕéüÇÃç\ë¢ëÃÇï‘ǵNjÇ∑
// struct {
// short numNames;
// PString names[numNames];
// };
if (sourceNames != nil) {
err = SPBGetDeviceInfo (siRefNum, siInputSourceNames, sourceNames);
}
#if DEBUG
if (err == noErr) {
printf ("\nThe sound input source names are:\n");
numNames = (*(short**)sourceNames)[0];
offset = 3;
for (i = 0; i < numNames; i++) {
BlockMoveData (&((char*)(*sourceNames))[offset],
sourceName, (*(char**)sourceNames)[offset-1]);
sourceName[(*(char**)sourceNames)[offset-1]] = 0;
printf (" %s\n", sourceName);
offset += (*(char**)sourceNames)[offset-1] + 1;
}
}
#endif
return err;
}
|
éüÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÕÅAÉTÉEÉìÉhì¸óÕÉIÉvÉVÉáÉìÉ_ÉCÉAÉçÉOÇçÏê¨Ç∑ÇÈÇΩÇflÇÃäÓñ{ìIÇ»ÉeÉNÉjÉbÉNÇé¶ÇµÇΩLJÇÃÇ≈Ç∑ÅBÇ‹Ç∏ÅAÉTÉEÉìÉhì¸óÕÉ\Å[ÉXñºÇÃÉäÉXÉgÇéÊìæÇµÅAǪÇÃÉäÉXÉgÇ©ÇÁÉÅÉjÉÖÅ[
(DZÇÃèÍçáÇÕÉ|ÉbÉvÉAÉbÉvÉÅÉjÉÖÅ[) ÇçÏê¨ÇµÅAǪÇÃÉÅÉjÉÖÅ[ÇÉ_ÉCÉAÉçÉOÇ…ë}ì¸ÇµÇƒÅAǪÇÃÉ_ÉCÉAÉçÉOÇï\é¶ÇµÇ‹Ç∑ÅBǪÇÃÉ_ÉCÉAÉçÉOÉ{ÉbÉNÉXÇ™è¡Ç¶ÇΩÇΔDZÇÎÇ≈ÅAÉÜÅ[ÉUÇ™ÉLÉÉÉìÉZÉãÇµÇƒÇ¢Ç»ÇØÇÍÇŒÅAGetControlValue
ÇégǡǃÉÜÅ[ÉUǙǫÇÃÉÅÉjÉÖÅ[çÄñ⁄ÇëIëǵÇΩÇ©Çí≤Ç◊ÅAsiInputSource ÉZÉåÉNÉ^Ç≈ǪÇÃílÇìnǵǃÅAÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoDžǪÇÃì¸óÕÉ\Å[ÉXÇégópÇ≥ÇπÇ‹Ç∑ÅBÉÅÉjÉÖÅ[ì‡ÇÃílÇÉ}ÉbÉsÉìÉOǵíºÇ∑ïKóvÇÕdžÇËÇ‹ÇπÇÒÅBÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÕÅAsiInputSource
Ç™ì¸óÕÉ\Å[ÉXÇëIëÇ∑ÇÈéûÇΔìØÇ∂èáèòÇ≈ñºëOÇÃÉäÉXÉgÇï‘Ç∑Ç©ÇÁÇ≈Ç∑ÅB
#define kSourceNamesMenu 3
#define kPlayThruCheckBox 4
OSErr DoSoundInputConfig (long soundInputDevice) {
OSErr err = noErr;
Rect box;
Handle sourceNames;
MenuHandle namesMenu;
ControlHandle control;
DialogPtr optionsDialog;
long offset,
i;
short type,
inputSource,
itemHit,
playThruState;
Boolean done = false;
err = GetSoundInputSourceNames (soundInputDevice, &sourceNames);
namesMenu = NewMenu (kNamesMenu, nil);
if (namesMenu != nil) {
offset = sizeof (short); // å¬êîÇÃÉtÉBÅ[ÉãÉhÇÕîÚÇŒÇ∑
for (i = 0; i < (*(short**)sourceNames)[0]; i++) {
AppendMenu (namesMenu, &((unsigned char*)(*sourceNames))[offset]);
offset += (*(char**)sourceNames)[offset] + 1;
}
InsertMenu (namesMenu, hierMenu);
optionsDialog = GetNewDialog (kOptionsDialog, nil, (WindowPtr)-1L);
GetDialogItem (optionsDialog, kSourceNamesMenu, &type, &
(Handle)control, &box);
err = SPBGetDeviceInfo (soundInputDevice, siInputSource, &inputSource);
SetControlValue (control, inputSource);
GetDialogItem (optionsDialog, kPlayThruCheckBox, &type, &
(Handle)control, &box);
err = SPBGetDeviceInfo (soundInputDevice, siPlayThruOnOff, &playThruState);
if (playThruState 1)
playThruState = 1;
SetControlValue (control, playThruState);
SetDialogDefaultItem (optionsDialog, ok);
ShowWindow (optionsDialog);
while (done == false) {
ModalDialog (nil, &itemHit);
switch (itemHit) {
case ok:
err = noErr;
done = true;
break;
case cancel:
err = userCanceledErr;
done = true;
break;
case kPlayThruCheckBox:
type = chkCtrl;
GetDialogItem (optionsDialog, kPlayThruCheckBox, &
type, &(Handle)control, &box);
SetControlValue (control, !GetControlValue (control));
break;
}
}
if (err == noErr) {
GetDialogItem (optionsDialog, kSourceNamesMenu, &
type, &(Handle)control, &box);
inputSource = GetControlValue (control);
err = SPBSetDeviceInfo (soundInputDevice, siInputSource, &inputSource);
if (err == noErr) {
GetDialogItem (optionsDialog, kPlayThruCheckBox, &
type, &(Handle)control, &box);
playThruState = GetControlValue (control);
if (playThruState == 1)
playThruState = 7;
err = SPBSetDeviceInfo (soundInputDevice, siPlayThruOnOff,
&playThruState);
}
}
DisposeDialog (optionsDialog);
DisposeMenu (namesMenu);
}
return (err);
}
|
ǪÇÃëºÇÃíçà”ÇΔÉRÉÅÉìÉg
ǢǬLJèqÇ◊ÇÈDZÇΔÇ≈Ç∑Ç™ÅAQuickTime ÇÕÉIÅ[ÉfÉBÉI (çƒê∂ÇΔò^âπ) ÇÇÊÇËä»íPÇ…àµÇ§ÇΩÇflDždžÇÈLJÇÃÇ≈Ç∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ïKóvÇΔÇ∑ÇÈò^âπÇ™Ç≤Ç≠ä»íPǻLJÇÃÇ≈džÇÈèÍçáÇÕÅAQuickTime
Çégǡǃò^âπÇ∑ÇÈÇÃÇ™ÇÊÇ¢Ç≈ǵÇÂǧÅBQuickTime Ç…ÇÕÅA1 ìxÇÃä»íPÇ»åƒÇ—èoǵÇ≈ÉAÉNÉZÉXÇ≈Ç´ÇÈïWèÄÉÜÅ[ÉUÉCÉìÉ^ÉtÉFÅ[ÉXÅASGSettingsDialog
Ç™ópà”Ç≥ÇÍǃǢNjÇ∑ÅBÇ‹ÇΩÅAQuickTime ÇégǶnjÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ìÆçÏÇ∑ÇÈÉnÅ[ÉhÉEÉFÉAÇÃDZÇΔÇà”éØÇπÇ∏Ç…ÅAä»íPÇ…âπê∫Çò^âπÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
óvñÒ
džǻÇΩÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™Ç∑Ç≈Ç…ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃê›íËÉ_ÉCÉAÉçÉOÇÉÜÅ[ÉUÇ…íÒãüǵǃǢÇÈÇÃÇ≈džÇÍÇŒÅAç°âÒÇÃ
PCI ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃïœçXÇ™ÅAdžǻÇΩÇ‚ÉÜÅ[ÉUÇ…ãÍí…ÇLJÇΩÇÁÇ∑DZÇΔÇÕdžÇËÇ‹ÇπÇÒÅBǵǩǵÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ëºÇÃÉ\ÉtÉgÉEÉFÉAÇ…àÀë∂ǵǃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃê›íËÇçsǡǃǢÇÈèÍçáÅAç°Ç±ÇªÇ∑Ç◊ǃÇÃÉTÉEÉìÉhê›íËÇé©ï™Ç≈ê≥ǵÇ≠èàóùÇ∑ÇÈÇÊǧDžÉAÉvÉäÉPÅ[ÉVÉáÉìÇÉAÉbÉvÉfÅ[ÉgÇ∑ÇÈéûÇ≈Ç∑ÅB
|